package org.study.module.hadoop;

import org.study.module.common.ModuleCommon;

import java.util.ArrayList;
import java.util.List;

/**
 * YARN安装Shell命令
 * 停止：stop-yarn.sh
 * 启动：start-yarn.sh
 * "可以访问 http://localhost:8088 查看YARN管理界面"
 */
public class YARNShell {
    public static List<String> yarnSiteOne(String hostname) {
        List<String> configs = new ArrayList<>();
        configs.add("cat > $HADOOP_HOME/etc/hadoop/yarn-site.xml << EOF");
        ModuleCommon.addConfigHead(configs);
        ModuleCommon.addProperty("yarn.nodemanager.aux-services", "mapreduce_shuffle", configs);
        ModuleCommon.addProperty("yarn.resourcemanager.hostname", hostname, configs);
        ModuleCommon.addConfigEnd(configs);
        configs.add("EOF");
        return configs;
    }

    public static List<String> yarnSiteMulti(String hostname) {
        List<String> configs = new ArrayList<>();
        configs.add("cat > $HADOOP_HOME/etc/hadoop/yarn-site.xml << EOF");
        ModuleCommon.addConfigHead(configs);
        ModuleCommon.addProperty("yarn.nodemanager.aux-services", "mapreduce_shuffle", configs);
        ModuleCommon.addProperty("yarn.resourcemanager.hostname", hostname, configs);
        ModuleCommon.addProperty("yarn.resourcemanager.address", hostname+":8032", configs);
        ModuleCommon.addProperty("yarn.resourcemanager.scheduler.address", hostname+":8030", configs);
        ModuleCommon.addProperty("yarn.resourcemanager.resource-tracker.address", hostname+":8031", configs);
        ModuleCommon.addProperty("yarn.resourcemanager.admin.address", hostname+":8033", configs);
        ModuleCommon.addProperty("yarn.resourcemanager.webapp.address", hostname+":8088", configs);
        ModuleCommon.addConfigEnd(configs);
        configs.add("EOF");
        return configs;
    }
    public static List<String> yarnSiteHA(String hostname) {
        List<String> configs = new ArrayList<>();
        configs.add("cat > $HADOOP_HOME/etc/hadoop/yarn-site.xml << EOF");
        ModuleCommon.addConfigHead(configs);
        configs.add("    <!-- 启用RM高可用 -->");
        ModuleCommon.addProperty("yarn.resourcemanager.ha.enabled", "true", configs);
        configs.add("    <!-- RM集群ID -->");
        ModuleCommon.addProperty("yarn.resourcemanager.cluster-id", "yarncluster", configs);
        configs.add("    <!-- RM节点列表 -->");
        ModuleCommon.addProperty("yarn.resourcemanager.ha.rm-ids", "rm1,rm2", configs);
        configs.add("    <!-- rm1配置（nn1） -->");
        ModuleCommon.addProperty("yarn.resourcemanager.hostname.rm1", "nn1", configs);
        configs.add("    <!-- rm2配置（nn2） -->");
        ModuleCommon.addProperty("yarn.resourcemanager.hostname.rm2", "nn2", configs);
        configs.add("    <!-- Zookeeper地址 -->");
        ModuleCommon.addProperty("yarn.resourcemanager.zk-address", "nn1:2181,nn2:2181,jn1:2181", configs);
        configs.add("    <!-- 启用自动恢复 -->");
        ModuleCommon.addProperty("yarn.resourcemanager.recovery.enabled", "true", configs);
        configs.add("    <!-- 状态存储类型 -->");
        ModuleCommon.addProperty("yarn.resourcemanager.store.class", "org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore", configs);
        configs.add("    <!-- 节点管理配置 -->");
        ModuleCommon.addProperty("yarn.nodemanager.aux-services", "mapreduce_shuffle", configs);
        ModuleCommon.addConfigEnd(configs);
        configs.add("EOF");
        return configs;
    }
}
